#pragma once
#include <graphics.h>

#include <vector>
using namespace std;

typedef enum {
    CHESS_WHITE = -1,  // 白方
    CHESS_BLACK = 1    // 黑方
} chess_kind_t;

struct ChessPos {
    int row;
    int col;
};

class Chess {
public:
    Chess(int gradeSize, int margin_x, int margin_y, float chessSize);

    // 棋盘的初始化：加载棋盘的图片资源，初始化棋盘的相关数据
    void init();

    // 判断在指定坐标(x,y)位置，是否是有效点击
    // 如果是有效点击，把有效点击的位置(行，列）保存在参数pos中
    bool clickBoard(int x, int y, ChessPos* pos);

    // 在棋盘的指定位置（pos）, 落子（kind）
    void chessDown(ChessPos* pos, chess_kind_t kind);

    // 获取棋盘的大小（13线、15线、19线）
    int getGradeSize();

    // 获取指定位置是黑棋，还是白棋，还是空白
    int getChessData(ChessPos* pos);
    int getChessData(int row, int col);

    // 判断棋局是否结束
    bool checkOver();

private:
    IMAGE chessBlackImg;  // 黑棋子
    IMAGE chessWhiteImg;  // 白棋子

    int gradeSize;  // 棋盘的大小（13线、15线、19线）
    int margin_x; // 棋盘的左上角的x坐标
    int margin_y; // 棋盘的左上角的y坐标
    float chessSize; // 棋子的大小

    vector<vector<int>> chessMap;  // 棋盘的数据    
    bool playerFlag;  // 下棋方的标志位 true:黑棋  false:白棋
};